package com.intretech.tj.gpp

import com.intretech.tj.gpp.callback.FailBody
import com.intretech.tj.gpp.callback.SuccessBody
import com.intretech.tj.gpp.entity.DTO.MapDataPayload
import com.intretech.tj.gpp.service.MapDatabaseService
import jakarta.inject.Inject
import jakarta.ws.rs.Consumes
import jakarta.ws.rs.POST
import jakarta.ws.rs.Path
import jakarta.ws.rs.Produces
import jakarta.ws.rs.core.MediaType
import jakarta.ws.rs.core.Response

@Path("/api/map") // 定义基础路径
@Produces(MediaType.APPLICATION_JSON) // 默认响应类型为 JSON
@Consumes(MediaType.APPLICATION_JSON) // 默认接收类型为 JSON
class MapResource {

    // 注入我们之前创建的数据库服务
    @Inject
    lateinit var dbService: MapDatabaseService

    @POST // 声明这是一个处理 HTTP POST 请求的方法
    @Path("/update") // 完整路径为 /api/map/update
    fun updateMapData(payload: MapDataPayload): Response {
        return try {
            // 1. 调用服务执行业务逻辑
            dbService.writeMapData(payload.edges, payload.rfidNodes)

            // 2. 构造成功的响应体
            val successResponse = SuccessBody(200, "Map data updated successfully.")

            // 3. 构建并返回 Response 对象
            // Response.ok() 会将 HTTP 状态码设置为 200
            // 并将 successResponse 对象序列化为 JSON 作为响应体
            Response.ok(successResponse).build()

        } catch (e: Exception) {
            // 1. 打印错误日志，便于调试
            e.printStackTrace()

            // 2. 构造失败的响应体
            val failResponse = FailBody(500, e.message ?: "An unknown error occurred.")

            // 3. 构建并返回 Response 对象
            // Response.status() 可以指定任意的 HTTP 状态码
            Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(failResponse).build()
        }
    }
}